import axios from 'axios'
import { MessageBox } from 'element-ui'
import store from '@/store'

let to = null;

function showBox() {
  if (to) {
    clearTimeout(to);
  }
  to = setTimeout(() => {
    MessageBox.confirm(
      '登录信息已经失效',
      '确定登出',
      {
        confirmButtonText: '重新登录',
        cancelButtonText: '取消',
        type: 'warning'
      }
    ).then(() => {
      // sessionStorage.removeItem('LOGIN')
      store.dispatch('user/logout')
      location.reload()
    })
  }, 1000)
}
// 请求前
axios.defaults.withCredentials = true
// const isRelease = true
const isRelease = false
const protocol = location.protocol // 获取当前域
const isHttps = protocol.indexOf('https:') === 0 ? 1 : 0 // https必须在首位

let url = ''
if (isRelease) {
  // url = isHttps ? 'https://huapu-power.com/api' : 'http://huapu-power.com/api' // 正式环境域名
  url = isHttps ? 'https://192.168.60.2/api' : 'http://192.168.60.2/api' // 测试环境域名
} else {
  url = '/api'
}
// 创建axios实例
const service = axios.create({
  // baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
  baseURL: url,
  timeout: 5000, // 请求超时时间
  validateStatus: function (status) {
    return status >= 200 && status < 500; // default
  },
  headers: {
    'Content-Type': 'application/json'
  }
})

// request拦截器
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['Authorization'] = 'Bearer ' + store.getters.token // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    return config
  },
  error => {
    // Do something with request error
    // console.log(error) // for debug
    Promise.reject(error);
  }
)

// response 拦截器
service.interceptors.response.use(
  response => {
    /**
     * code为非200是抛错 可结合自己业务进行修改
     */
    const status = response.status;
    const res = response.data;
    if (status === 500 || status === 404) {
      const error = res.msg || res.error || res.message || '网络故障, 请稍后再试...';
      // Message({
      //   message: error,
      //   type: 'error',
      //   duration: 3 * 1000
      // })
      return Promise.reject(error);
    } else if (status === 400) {
      const error = '用户名和密码错误...';
      return Promise.reject(error);
    } else if (status === 401) {
      const error = '身份验证失败, 请重新登录';
      showBox();
      return Promise.reject(error);
    }
    // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
    if (status === 501 || status === 50012 || status === 50014) {
      showBox();
    } else {
      return response.data
    }
  },
  error => {
    // if (/403/.test(error)) {
    //   Message({
    //     message: '您无权限做此操作',
    //     type: 'error',
    //     duration: 3 * 1000
    //   })
    //   return Promise.reject(error)
    // }
    // Message({
    //   message: error.msg || '网络故障, 请稍后再试...',
    //   type: 'error',
    //   duration: 3 * 1000
    // })
    return Promise.reject('网络故障, 请稍后再试...' || error)
  }
)

export default service
